﻿using BarManager.Core.DomainModel;
using BarManager.Core.DomainService;
using BarManager.Core.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BarManager.Infrastructure.Data.Repository
{
    public class EnvioRepository : BaseRepository<Envio>, IEnvioRepository
    {
        private IEnvioDetalleRepository EnvioDetalleRepository { get; set; }

        public EnvioRepository(IObjectContext context, IEnvioDetalleRepository envioDetalleRepository)
            : base(context)
        {
            this.EnvioDetalleRepository = envioDetalleRepository;        
        }

        public override void Add(Envio entity)
        {
            //- Add Master
            Envio cabecera = new Envio
            {                
                Estado = entity.Estado,
                HoraEnvio = entity.HoraEnvio,
                Paga = entity.Paga,
                Recargo = entity.Recargo,
                ClienteId = entity.ClienteId,
                DomicilioId = entity.DomicilioId,
                FechaCreacion = entity.FechaCreacion
            };
            base.Add(cabecera);

            //- Add Details         
            foreach (var item in entity.Detalle)
            {
                EnvioDetalleBase detalle = null;
                if (item is EnvioDetalleProducto)
                {
                    detalle = new EnvioDetalleProducto
                    {
                        Cantidad = item.Cantidad,                         
                        FechaPedido = item.FechaPedido,
                        FechaEntrega = item.FechaEntrega,                        
                        ProductoId = (item as EnvioDetalleProducto).ProductoId,
                        EnvioId = cabecera.Id,
                        Envio = cabecera,
                        Guid = item.Guid
                    };
                }
                else
                {
                    detalle = new EnvioDetallePromocion
                    {
                        Cantidad = item.Cantidad,                        
                        FechaPedido = item.FechaPedido,
                        FechaEntrega = item.FechaEntrega,                        
                        PromocionId = (item as EnvioDetallePromocion).PromocionId,
                        EnvioId = cabecera.Id,
                        Envio = cabecera,
                        Guid = item.Guid
                    };
                }
                EnvioDetalleRepository.Add(detalle);
            }
        }
    }
}
